// new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一

// 特点
// 1. 访问构造函数里的属性
// 2. 访问prototype的属性

// new 返回的结果是一个对象
// 构造函数有返回值(返回对象或者基本类型)

function objectFacory() {
  var obj = new Object();
  // shift 会修改原数组，所以 arguments 会被去除第一个参数
  Constructor = [].shift.call(arguments);
  obj.__proto__ = Constructor.prototype;
  var result = Constructor.apply(obj, arguments);

  return typeof result === "object" ? result : obj;
}
